Prefetching in general means bringing data or instructions from memory into the cache before they are needed. When an application needs data that was prefetched, instead of waiting for the data from memory, the application can retrieve the data from cache and continue execution. There are generally two main ways in which prefetching can occur: initiated by hardware or initiated by software. Hardware prefetching can bring data into Level-one (L1) cache, Level-two (L2) cache, or both. A hardware prefetcher can implement an algorithm that monitors data access patterns for a particular cache and then tries to predict what addresses will be needed in the future.